package ar.uba.fi.taller2.cmmiassistant;

import java.util.HashMap;
import java.util.Map;

import ar.uba.fi.taller2.cmmiassistant.controlador.Controlador;
import ar.uba.fi.taller2.cmmiassistant.frontend.login.Login;
import ar.uba.fi.taller2.cmmiassistant.modelo.Organizacion;
import ar.uba.fi.taller2.cmmiassistant.modelo.RegistroServicios;
import ar.uba.fi.taller2.cmmiassistant.modelo.ServicioIdentificadores;
import ar.uba.fi.taller2.cmmiassistant.modelo.aplicacion.CmmiAssistant;
import ar.uba.fi.taller2.cmmiassistant.modelo.cmmi.AreaProceso;
import ar.uba.fi.taller2.cmmiassistant.modelo.cmmi.Madurez;
import ar.uba.fi.taller2.cmmiassistant.modelo.cmmi.Objetivo;
import ar.uba.fi.taller2.cmmiassistant.modelo.cmmi.Practica;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Continua;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Escalonada;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Evaluacion;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Instancia;
import ar.uba.fi.taller2.cmmiassistant.persistencia.PersistenciaException;
import ar.uba.fi.taller2.cmmiassistant.persistencia.ServicioPersistencia;
import ar.uba.fi.taller2.cmmiassistant.persistencia.ServicioPersistenciaXStream;
import ar.uba.fi.taller2.cmmiassistant.seguridad.Usuario;

/**
 * 
 * 
 */
public class App {

	public static void main(String[] args) throws PersistenciaException {

		ServicioPersistencia servicioPersistencia = new ServicioPersistenciaXStream(
				"./src/main/resources/data");

		CmmiAssistant modelo = new CmmiAssistant(servicioPersistencia);

		Organizacion organizacion = new Organizacion();
		organizacion.setIdOrganizacion(1);
		organizacion.setNombre("Taller 2");

		Evaluacion evaluacion;
		Instancia instancia;

		evaluacion = new Evaluacion();
		evaluacion.setIdEvaluacion(1);
		evaluacion.setNombre("CMMI Nivel 2");
		Escalonada representacion = new Escalonada();
		Madurez madurez = new Madurez();

		// Practica practica = new Practica();
		// practica.setNombre("Practica 1");
		// practica.setIdPractica(1);

		java.util.List<AreaProceso> listaProcessAreas = modelo
				.getModeloProcesos().getAreas();

		for (AreaProceso pa : listaProcessAreas) {

			if (pa.getObjetivosEspecificos().size() > 0
					&& pa.getObjetivosGenericos().size() > 0) {
				madurez.getAreasProceso().add(pa);
			}
		}

		representacion.setMadurez(madurez);
		// representacion.getPracticas().add(practica);
		evaluacion.setRepresentacion(representacion);
		organizacion.getEvaluaciones().add(evaluacion);

		// Objetivo obj = getNuevoObjetivo("Objetivo ccmi nivel 2", 1,
		// practica);
		// areaProceso.getObjetivosGenericos().add(obj);
		// representacion.getObjetivos().add(obj);

		// //PRACTICA Y RESULTADO PARA EVALUACION
		// practica = new Practica();
		// practica.setNombre("Practica Evaluacion");
		// practica.setIdPractica(2);
		// areaProceso.getPracticas().add(practica);
		// representacion.getPracticas().add(practica);
		// Resultado resultado = new Resultado();
		// // resultado.setIdResultado(2);
		// CumplimientoPractica cumplmientoPractica = new
		// CumplimientoPractica();
		// CumplimientoObjetivo cumplimientoObjetivo = new
		// CumplimientoObjetivo();
		// // cumplmientoPractica.setIdCumplimientoPractica(1);
		// // cumplmientoPractica.setNivel(NivelCumplimientoPractica.BAJO);
		// // cumplmientoPractica.setPractica(practica);
		// HashSet<CumplimientoPractica> set = new
		// HashSet<CumplimientoPractica>();
		// HashSet<CumplimientoObjetivo> setOjb = new
		// HashSet<CumplimientoObjetivo>();
		// set.add(cumplmientoPractica);
		// resultado.setCumplimientosPracticas(set);
		// evaluacion.setResultado(resultado);

//		Map<String,Usuario> mapaUsuario = new HashMap<String,Usuario>();
//		Usuario usuario = null;
//		ServicioIdentificadores servIdent = 
//			RegistroServicios.getInstancia().getServicioIdentificadores();
//		usuario = new Usuario();
//		usuario.setIdUsuario(servIdent.getId(Usuario.class));
//		usuario.setNombre("CMMI");
//		usuario.setPassword(RegistroServicios.getInstancia().getServicioUsuario().getEncrypter().encrypt("1234"));
//		
//		mapaUsuario.put(usuario.getNombre(), usuario);
//		
//		usuario = new Usuario();
//		usuario.setIdUsuario(servIdent.getId(Usuario.class));
//		usuario.setNombre("CMMI2");
//		usuario.setPassword(RegistroServicios.getInstancia().getServicioUsuario().getEncrypter().encrypt("1234"));
//		
//		mapaUsuario.put(usuario.getNombre(), usuario);
//		
//		RegistroServicios.getInstancia().getServicioUsuario().guardarListaUsuarios(mapaUsuario);
		
		// INSTNACIA CON PRACTICA Y RESULTADO
		/*
		 * instancia = new Instancia(); instancia.setIdInstancia(1);
		 * instancia.setNombre("CMMI Assistant");
		 * evaluacion.getInstancias().add(instancia); resultado = new
		 * Resultado(); resultado.setIdResultado(1); cumplmientoPractica = new
		 * CumplimientoPractica();
		 * cumplmientoPractica.setIdCumplimientoPractica(1);
		 * cumplmientoPractica.setNivel(NivelCumplimientoPractica.ALTO);
		 * cumplmientoPractica.setPractica(practica); set = new HashSet<CumplimientoPractica>();
		 * set.add(cumplmientoPractica);
		 * resultado.setCumplimientosPracticas(set);
		 * 
		 * cumplimientoObjetivo = new CumplimientoObjetivo();
		 * cumplimientoObjetivo.setIdCumplimientoObjetivo(1);
		 * cumplimientoObjetivo.setNivel(NivelCumplimientoObjetivo.NO_SATISFECHO);
		 * cumplimientoObjetivo.setObjetivo(obj); setOjb = new HashSet<CumplimientoObjetivo>();
		 * setOjb.add(cumplimientoObjetivo);
		 * resultado.setCumplimientosObjetivos(setOjb);
		 * 
		 * instancia.setResultado(resultado);
		 * modelo.getInstanciaSeleccionada().setValores(instancia);
		 */

		instancia = new Instancia();
		instancia.setIdInstancia(2);
		instancia.setNombre("Capa Orquestacion");
		evaluacion.getInstancias().add(instancia);

		evaluacion = new Evaluacion();
		evaluacion.setIdEvaluacion(2);
		evaluacion.setNombre("CMMI Nivel 3");
		evaluacion.setRepresentacion(new Continua());
		organizacion.getEvaluaciones().add(evaluacion);

		instancia = new Instancia();
		instancia.setIdInstancia(3);
		instancia.setNombre("CMMI Assistant 2");
		evaluacion.getInstancias().add(instancia);

		instancia = new Instancia();
		instancia.setIdInstancia(4);
		instancia.setNombre("Campus Virtual");
		evaluacion.getInstancias().add(instancia);

		modelo.getOrganizacionSeleccionada().setValores(organizacion);

		Controlador controlador = new Controlador(modelo);
		// FrameVista vista = new FrameVista();
		Login vista = new Login();
		vista.setControlador(controlador);
		vista.setVisible(true);
	}

	/**
	 * crea un objetivo dummy
	 * 
	 * @return
	 */
	public static Objetivo getNuevoObjetivo(String descripcion,
			Integer idObjetivo, Practica... practicas) {
		Objetivo obj = new Objetivo();
		obj.setDescripcion(descripcion);
		obj.setIdObjetivo(idObjetivo);
		// if (practicas != null)
		// obj.setPracticas(practicas);
		return obj;
	}
}
